//==========================================================================
// Copyright (c) 2000-2008,  Elastos, Inc.  All Rights Reserved.
//==========================================================================
/*
 *
 * Copyright (c) 1987  X Consortium
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 * X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * Except as contained in this notice, the name of the X Consortium shall not be
 * used in advertising or otherwise to promote the sale, use or other dealings
 * in this Software without prior written authorization from the X Consortium.
 *
 *
 * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
 *
 *                         All Rights Reserved
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted,
 * provided that the above copyright notice appear in all copies and that
 * both that copyright notice and this permission notice appear in
 * supporting documentation, and that the name of Digital not be
 * used in advertising or publicity pertaining to distribution of the
 * software without specific, written prior permission.
 *
 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 * SOFTWARE.
 *
 */
#ifndef SCREENINTSTRUCT_H
#define SCREENINTSTRUCT_H

#include "screenint.h"
#include "miscstruct.h"

#include "Xproto.h"
#include "dix.h"

typedef struct _PixmapFormat {
    unsigned char    depth;
    unsigned char    bitsPerPixel;
    unsigned char    scanlinePad;
    } PixmapFormatRec;

typedef struct _Visual {
    VisualID        vid;
    short        classcolor;
    short        bitsPerRGBValue;
    short        ColormapEntries;
    short        nplanes;/* = log2 (ColormapEntries). This does not
                 * imply that the screen has this many planes.
                 * it may have more or fewer */
    unsigned long    redMask, greenMask, blueMask;
    int            offsetRed, offsetGreen, offsetBlue;
  } VisualRec;

typedef struct _Depth {
    unsigned char    depth;
    short        numVids;
    VisualID        *vids;    /* block of visual ids for this depth */
  } DepthRec;


/*
 *  There is a typedef for each screen function pointer so that code that
 *  needs to declare a screen function pointer (e.g. in a screen private
 *  or as a local variable) can easily do so and retain full type checking.
 */

typedef    _ELASTOS Boolean (* CloseScreenProcPtr)(int  screen_idx, ScreenPtr pScreen);

typedef    void (* QueryBestSizeProcPtr)();

typedef    _ELASTOS Boolean (* SaveScreenProcPtr)();

typedef    _ELASTOS Boolean (* CreateColormapProcPtr)();

typedef    void (* DestroyColormapProcPtr)();

typedef    void (* InstallColormapProcPtr)();

typedef    void (* UninstallColormapProcPtr)();

typedef    int  (* ListInstalledColormapsProcPtr)();

typedef    void (* StoreColorsProcPtr)();

typedef    void (* ResolveColorProcPtr)();

typedef struct _Screen {
    int         myNum;    /* index of this instance in Screens[] */
    ATOM        id;
    short       width, height;
    short       mmWidth, mmHeight;
    short       numDepths;
    unsigned char           rootDepth;
    DepthPtr                allowedDepths;
    unsigned long           rootVisual;
    unsigned long           defColormap;
    short           minInstalledCmaps, maxInstalledCmaps;
    char            backingStoreSupport, saveUnderSupport;
    unsigned long       whitePixel, blackPixel;
    unsigned long       rgf;    /* array of flags; she's -- HUNGARIAN */

    /* Random screen procedures */
    _ELASTOS Boolean (* CloseScreen)(int  screen_idx, ScreenPtr pScreen);
//    CloseScreenProcPtr              CloseScreen;

    CreateColormapProcPtr           CreateColormap;
    DestroyColormapProcPtr          DestroyColormap;
    InstallColormapProcPtr          InstallColormap;
    UninstallColormapProcPtr        UninstallColormap;
    ListInstalledColormapsProcPtr   ListInstalledColormaps;
    StoreColorsProcPtr              StoreColors;
    ResolveColorProcPtr             ResolveColor;

    /* anybody can get a piece of this array */
    DevUnion    *devPrivates;
} ScreenRec;

typedef struct _ScreenInfo {
    int        imageByteOrder;
    int        bitmapScanlineUnit;
    int        bitmapScanlinePad;
    int        bitmapBitOrder;
    int        numPixmapFormats;
    PixmapFormatRec
        formats[MAXFORMATS];
    int        arraySize;
    int        numScreens;
    ScreenPtr    screens[MAXSCREENS];
    int        numVideoScreens;
} ScreenInfo;

extern ScreenInfo screenInfo;

extern void InitOutput(
    ScreenInfo     * /*pScreenInfo*/
);

#endif /* SCREENINTSTRUCT_H */
